package manayShape_Polymorphism;

public class ManyTest {
    public static void main(String[] args) {
        Teacher t=new Teacher();//1.没有向上造型的对象可以调用：可以调用Teacher中的代码，能调用Person中继承的代码
        t.course="java";//Teacher自己的代码
        //t.name="李老师";//继承的代码
        t.age=34;
        t.eat();//继承的代码
        t.sayHi();//继承的代码
        t.teach();//Teacher自己的代码

        Person p=new Teacher();
        //2.向上造型的对象能调用：  父类中的代码，或者父类和子类都有的代码(Person name, Teacher name)
        //p.course="高数";//报错，可以修改为下边if的格式
        //上边的代码可以修改为下边的书写格式就不再报错了：
        if(p instanceof Teacher){
            Teacher t1=(Teacher)p;
            t1.course="高数";
        }

        //向上造型的对象不能调用子类独有的代码
        //注意：强制类型转化之后就可以调用了
        //(强制类型转化之后就可以调用course了，但是强制类型转化可能会失败，所以在转化之前要先用instanceof判断对象类型属于Teacher类型才能进行强制类型转化)
        p.eat();//继承的代码
        p.sayHi();//继承的代码
        //p.teach();//报错，可以修改为下边if的格式
        //上边的代码可以修改为下边的书写格式就不再报错了：
        if(p instanceof Teacher){
            Teacher t1=(Teacher)p;
            t1.teach();
        }
        //向上造型的对象不能调用子类独有的代码
        //注意：强制类型转化之后就可以调用了
        //(强制类型转化之后就可以调用teach()了，但是强制类型转化可能会失败，，所以在转化之前要先用instanceof判断对象类型属于Teacher类型才能进行强制类型转化)
        p.walk();//向上造型的对象可以调用父类和子类都有的方法(方法重写)// 会执行子类的方法(使用哪个类的对象就执行哪个类的方法)
    }
}
